/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package proyecto1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author Maria Fernanda Martinez, Adrian Martinez
 */
@ManagedBean(name = "Bean")
@SessionScoped
public class Bean {
    private ArrayList book = new ArrayList();
    private Libros libro = new Libros();
    private String autor = null;
    private String titulo = null;
    private String rowAuthor = null;
    private String rowTitle = null;

     
    
    /**
     * Nombre: Bean
     * Descripción:
     * Creates a new instance of Bean
     * Parámetros, valor de retorno, pre y post condiciones no hay
     */
    public Bean() {
        autor="";
        titulo="";
        rowAuthor="";
        rowTitle="";
    }

    
    /**
     * Nombre: getAutor
     * Descripción: obtener el contenido de autor
     * No tiene parámtros ni post.
     * Pre: existe autor
     * @return the autor
     */
    public String getAutor() {
        return autor;
    }

    /**
     * Nombre: setAutor
     * Descripción: establece el valor de autor, se limpia el arreglo de book y rowAuthor
     * No tiene valor de retorno
     * Pre: existe autor
     * Post: autor tiene un valor específico
     * @param autor the autor to set
     */
    public void setAutor(String autor) {
        getBook().clear();   
        setRowAuthor("");
        this.autor = autor;
    }


    /**
     * Nombre: getTitulo
     * Descripción: obtener el contenido de titulo
     * No tiene parámtros ni post.
     * Pre: existe titulo
     * @return the titulo
     */
    public String getTitulo() {
        return titulo;
    }

    /**
     * Nombre: setTitulo
     * Descripción: establece el valor de titulo, se limpia el arreglo de book y rowTitle
     * No tiene valor de retorno
     * Pre: existe titulo
     * Post: titulo tiene un valor específico
     * @param titulo the titulo to set
     */
    public void setTitulo(String titulo) {
        getBook().clear();
        setRowTitle("");
        this.titulo = titulo;
    }
    
    
    /**
     * Nombre: searchAuthor
     * Descipción: se engarga de realizar la prueba y conexión con la base de datos, realiza la búsqueda del nombre
     * del autor ingresado por el usuario.
     * No tiene valor de retorno ni parámetros
     * Pre: existe una base de datos
     * Post: resultados de la búsqueda en la base de datos guardada en el arreglo book
     */
    public void searchAuthor(){
        try{
            getBook().clear();
            rowAuthor="";
            Class.forName("com.mysql.jdbc.Driver");
            Connection conexion = DriverManager.getConnection ("jdbc:mysql://localhost/proyecto1","root", "1234");
            java.sql.Statement s = conexion.createStatement(); 
            ResultSet rs = s.executeQuery("select * from libros");
            
            while (rs.next()) 
            {
                if(autor.equals(""))
                    setRowAuthor("No hay resultados disponibles");
                
                else if(rs.getString(1).contains(autor)&&autor.length()>0){
                    
                    libro=new Libros();
                    libro.setAutor(rs.getString(1));
                    libro.setEdicion(rs.getShort(2));
                    libro.setNombre(rs.getString(3));
                    libro.setAnio(rs.getShort(4));
                    libro.setEstado(rs.getString(5));
                    libro.setPrecio(rs.getShort(6));
                    libro.setCurso(rs.getString(7));
                    libro.setProfesor(rs.getString(8));
                    libro.setCorreo(rs.getString(9));
                    getBook().add(libro);
                    rowAuthor = " ";
                }   
            }
           
            autor="";
        } catch(Exception e) {
            e.printStackTrace();
        } 
    }
    
    
    
    /**
     * Nombre: searchTitle
     * Descipción: se engarga de realizar la prueba y conexión con la base de datos, realiza la búsqueda del nombre
     * del libro ingresado por el usuario.
     * No tiene valor de retorno ni parámetros
     * Pre: existe una base de datos
     * Post: resultados de la búsqueda en la base de datos guardada en el arreglo book
     */
    public void searchTitle(){
        try{
            getBook().clear();
            rowTitle="";
            Class.forName("com.mysql.jdbc.Driver");
            Connection conexion = DriverManager.getConnection ("jdbc:mysql://localhost/proyecto1","root", "1234");
            java.sql.Statement s = conexion.createStatement(); 
            ResultSet rs = s.executeQuery("select * from libros");
            
            while (rs.next()) 
            {
                if(titulo.equals(""))
                    setRowTitle("No hay resultados disponibles");
                
                else if(rs.getString(3).contains(titulo)&&titulo.length()>0){
                    
                    libro=new Libros();
                    libro.setAutor(rs.getString(1));
                    libro.setEdicion(rs.getShort(2));
                    libro.setNombre(rs.getString(3));
                    libro.setAnio(rs.getShort(4));
                    libro.setEstado(rs.getString(5));
                    libro.setPrecio(rs.getShort(6));
                    libro.setCurso(rs.getString(7));
                    libro.setProfesor(rs.getString(8));
                    libro.setCorreo(rs.getString(9));
                    getBook().add(libro);
                    rowTitle = " ";
                }   
            }
            titulo="";
        } catch(Exception e) {
            e.printStackTrace();
        } 
    }
    
    
    
    
    /**
     * Nombre: getRowAuthor
     * Descripción: obtener el contenido de rowAuthor
     * No tiene parámtros ni post.
     * Pre: existe rowAuthor
     * @return the rowAuthor
     */
    public String getRowAuthor() {
        return rowAuthor;
    }

    /**
     * Nombre: setRowAuthor
     * Descripción: establece el valor de rowAuthor
     * No tiene valor de retorno
     * Pre: existe rowAuthor
     * Post: rowAuthor tiene un valor específico
     * @param rowAuthor the rowAuthor to set
     */
    public void setRowAuthor(String rowAuthor) {
        this.rowAuthor = rowAuthor;
    }

    /**
     * Nombre: getRowTitle
     * Descripción: obtener el contenido de rowTitle
     * No tiene parámtros ni post.
     * Pre: existe rowTitle
     * @return the rowTitle
     */
    public String getRowTitle() {
        return rowTitle;
    }

    /**
     * Nombre: setRowTitle
     * Descripción: establece el valor de rowTitle
     * No tiene valor de retorno
     * Pre: existe rowTitle
     * Post: rowTitle tiene un valor específico
     * @param rowTitle the rowTitle to set
     */
    public void setRowTitle(String rowTitle) {
        this.rowTitle = rowTitle;
    }


    /**
     * Nombre: getLibro
     * Descripción: obtener el contenido de libro
     * No tiene parámtros ni post.
     * Pre: existe libro
     * @return the libro
     */
    public Libros getLibro() {
        return libro;
    }

    /**
     * Nombre: setLibro
     * Descripción: establece el valor de libro
     * No tiene valor de retorno
     * Pre: existe libro
     * Post: libro tiene un valor específico
     * @param libro the libro to set
     */
    public void setLibro(Libros libro) {
        this.libro = libro;
    }

    /**
     * Nombre: getBook
     * Descripción: obtener el contenido de book
     * No tiene parámtros ni post.
     * Pre: existe book
     * @return the book
     */
    public ArrayList getBook() {
        return book;
    }

    /**
     * Nombre: setBook
     * Descripción: establece el valor de book
     * No tiene valor de retorno
     * Pre: existe book
     * Post: book tiene un valor específico
     * @param book the book to set
     */
    public void setBook(ArrayList book) {
        this.book = book;
    }


}
